#include<bits/stdc++.h>
using namespace std;

int main() {
	string ori;
	cin >> ori;
	int n;
	cin >> n;
	while (n--) {
		int l, r;
		string a, b;
		cin >> l >> r >> a >> b;
		l--, r--;

		string t(ori, l, r - l + 1);

		string t1(ori, 0, l);
		string t2(ori, r + 1);
		string tmp = t1 + t2;

		int target = INT_MAX;	// 最终粘贴位置
		// 情况 1：剪切字符串左边有完整的 a + b
		int idx1 = ori.rfind(a + b, l - a.size() - b.size());
		if (idx1 != -1)
			idx1 += a.size();

		// 情况 2：剪切字符串右边有完整的 a + b
		int idx2 = ori.find(a + b, r + 1);
		if (idx2 != -1)
			idx2 += a.size();

		// 情况 3：剪切字符串左边有 a + b 中的一段
		int idx3 = tmp.rfind(a + b, l - 1);	// l属于剪切字符串的一部分
		if (idx3 != -1)
			idx3 += a.size();

		if (idx1 != -1 && abs(idx1 - l) < abs(target - l))
			target = idx1;
		if (idx2 != -1 && abs(idx2 - l) < abs(target - l))
			target = idx2;
		if (idx3 != -1 && abs(idx3 - l) < abs(target - l) && idx3 + a.size() + b.size() - 1 > r)
			target = idx3;


		if (target == idx1) {
			string a1(ori, 0, target);
			string a2(ori, r + 1);

			ori = a1 + t;
			if (target + a.size() + b.size() - 1 + 1 < l) {
				string a3(ori, target + a.size() + b.size() - 1, l - target - a.size() - b.size() + 1);
				ori += a3;
			}

			ori += a2;
		} else if (target == idx2) {
			ori = t1;

			if (target - 1 > r) {
				string a3(ori, r + 1, target - r - 1);
				ori += a3;
			}

			string a1(ori, target);
			ori += a1;
		} else if (target == idx3) {
			string a1(ori, target, l - target);
			string a2(tmp, )
		}
	}
	return 0;
}
